home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / HENSA / MISC / SHELL.ARC / Shell / Sources / c / Check < prev    next >
Text File  |  1994-05-17  |  3KB  |  102 lines

  1. #include <limits.h>
  2.  
  3. #include "DeskLib:WimpSWIs.h"
  4. #include "DeskLib:Coord.h"
  5.  
  6. #include "Shell.Shell.h"
  7. #include "Shell.Check.h"
  8.  
  9.  
  10.  
  11.  
  12.  
  13. BOOL Shell_CheckWindowSizeScroll( window_handle w, const wimp_rect *rect, BOOL bottomscroll)
  14.     /* Expands the window to contain the workarea rect if needed.    */
  15.     /* Returns TRUE if rect is visible.                    */
  16.     /* If bottomscroll is TRUE, the window is scrolled down if already */
  17.     /* at bottom of workarea.                        */
  18. {
  19.     window_info info;
  20.     BOOL changedsize = FALSE, movescroll = FALSE;
  21.  
  22. info.window = w;
  23. Wimp_GetWindowInfo( &info);
  24.  
  25. if (bottomscroll)    {
  26.     if ( info.block.scroll.y <=
  27.         info.block.workarearect.min.y +
  28.         (info.block.screenrect.max.y - info.block.screenrect.min.y)
  29.         )    movescroll = TRUE;
  30.     }
  31.  
  32. if ( rect->min.x-4 < info.block.workarearect.min.x)    {
  33.     info.block.workarearect.min.x = rect->min.x-4;
  34.     changedsize = TRUE;
  35.     }
  36. if ( rect->min.y-4 < info.block.workarearect.min.y)    {
  37.     info.block.workarearect.min.y = rect->min.y-4;
  38.     changedsize = TRUE;
  39.     }
  40. if ( rect->max.x > info.block.workarearect.max.x)    {
  41.     info.block.workarearect.max.x = rect->max.x;
  42.     changedsize = TRUE;
  43.     }
  44. if ( rect->max.y > info.block.workarearect.max.y)    {
  45.     info.block.workarearect.max.y = rect->max.y;
  46.     changedsize = TRUE;
  47.     }
  48.  
  49. if ( changedsize) Wimp_SetExtent( w, &info.block.workarearect);
  50.  
  51. if ( bottomscroll && movescroll)    {
  52.         window_state state;
  53.     Wimp_GetWindowState( w, &state);
  54.     state.openblock.scroll.y = INT_MIN;
  55.     Wimp_OpenWindow( (window_openblock *) &state.openblock);
  56.     /* still need to redraw if window is scrolled */
  57.     }
  58.  
  59. Coord_RectToWorkArea( &info.block.screenrect, (convert_block *) &info.block);
  60. return Coord_RectsOverlap( (wimp_rect *) rect, &info.block.screenrect);
  61. }
  62.  
  63.  
  64. /*
  65. The following define is in "Shell.Check.h"
  66. #define Shell_CheckWindowSize( w, r) Shell_CheckWindowSizeScroll( w, r, FALSE)
  67. */
  68.  
  69.  
  70.  
  71. void Shell_CheckWindSizeAndRedraw( window_handle window, const wimp_rect *rect)
  72. {
  73. if ( Shell_CheckWindowSize( window, rect))    {
  74.     window_redrawblock block;
  75.     block.window    = window;
  76.     block.rect    = *rect;
  77.     Wimp_ForceRedraw( &block);
  78.     }
  79. return;
  80. }
  81.  
  82.  
  83.  
  84.  
  85. void Shell_CheckWindSizeAndRedrawAndScroll( window_handle window, const wimp_rect *rect)
  86. {
  87. if ( Shell_CheckWindowSizeScroll( window, rect, /* bottom scroll */ TRUE))    {
  88.     window_redrawblock block;
  89.     block.window    = window;
  90.     block.rect    = *rect;
  91.     Wimp_ForceRedraw( &block);
  92.     }
  93. return;
  94. }
  95.  
  96.  
  97.  
  98. void Shell_CheckWindSizeAndRedrawSlow( Shell_rectblock *r)
  99. {
  100. if ( Shell_CheckWindowSize( r->window, &r->icon.workarearect))    Shell_ForceRectRedrawSlow( r);
  101. }
  102.